//
//package org.example.util.file;
//
//import cn.hutool.json.JSONUtil;
//import com.njwx.yq.business.knowledge_platform.entity.rt.FilePathRt;
//import org.example.common.bean.CommonException;
//import org.example.common.bean.ResponseBean;
//import org.example.common.constant.Constants;
//import org.example.common.feign.inner.common.fastdfs.FastDfsFeign;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.poi.hwpf.HWPFDocument;
//import org.apache.poi.hwpf.usermodel.*;
//import org.apache.poi.xwpf.usermodel.*;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Objects;
//import java.util.UUID;
//
///**
// * @author: ZhangMingmin
// * @since: 2024-11-29 15:41
// * @description:
// */
//@Slf4j
//public class WordDetailUtil {
//    public static final String FILE_EXTENSION_DOC = "doc";
//    public static final String FILE_EXTENSION_DOCX = "docx";
//
//    /**
//     * 解析word 获取文本
//     *
//     * @param fis fis
//     * @param fileName fileName
//     * @return ParseEntity
//     * @throws Exception Exception
//     */
//    public static String parseWordFile(InputStream fis,String fileName) throws Exception {
//        String fileExtension = getFileExtension(fileName);
//        if (Objects.equals(fileExtension,FILE_EXTENSION_DOC)){
//            return parseWordFileDoc(fis);
//        }
//        if (Objects.equals(fileExtension,FILE_EXTENSION_DOCX)){
//            return parseWordFileDocx(fis);
//        }
//        throw new CommonException("word文件不在允许范围内");
//    }
//
//    /**
//     * 解析Word文档并提取中文字符
//     *
//     * @param fis InputStream
//     * @return String 文本
//     * @throws IOException 异常
//     */
//    public static String parseWordFileDocx(InputStream fis) throws IOException {
//        List<String> content = new ArrayList<>();
//        XWPFDocument document = new XWPFDocument(fis);
//        // 解析段落
//        List<XWPFParagraph> paragraphs = document.getParagraphs();
//        for (XWPFParagraph paragraph : paragraphs) {
//            String text = paragraph.getText();
//            if (!text.isEmpty()) {
//                content.add(text);
//            }
//        }
//        // 解析表格
//        List<XWPFTable> tables = document.getTables();
//        for (XWPFTable table : tables) {
//            for (XWPFTableRow row : table.getRows()) {
//                for (XWPFTableCell cell : row.getTableCells()) {
//                    String text = cell.getText();
//                    if (!text.isEmpty()) {
//                        content.add(text);
//                    }
//                }
//            }
//        }
//
//        StringBuilder stringBuilder = new StringBuilder();
//        for (String txt : content) {
//            stringBuilder.append(txt);
//            stringBuilder.append("\n");
//        }
//        return stringBuilder.toString();
//    }
//
//    /**
//     * docx 抽取图片
//     *
//     * 备注： 此方法抽取的docx中的图片 默认会去除重复
//     * @param fis InputStream
//     * @param fastDfsFeign FastDfsFeign
//     * @throws IOException IOException
//     */
//    public static List<FilePathRt> extractImagesDocx(InputStream fis, FastDfsFeign fastDfsFeign) throws IOException {
//        List<FilePathRt> filePathList = new ArrayList<>();
//        XWPFDocument document = new XWPFDocument(fis);
//        List<XWPFPictureData> pictures = new ArrayList<>();
//        for (XWPFParagraph p : document.getParagraphs()) {
//            for (XWPFRun r : p.getRuns()) {
//                for (XWPFPicture pic : r.getEmbeddedPictures()) {
//                    XWPFPictureData pictureData = pic.getPictureData();
//                    pictures.add(pictureData);
//                }
//            }
//        }
//        if (pictures.size() > Constants.FILE_PIC_LIMITATION){
//            log.info("DOCX文件 图片数据超过{}张",Constants.FILE_PIC_LIMITATION);
//            return new ArrayList<>();
//        }
//        for (XWPFPictureData picture : pictures) {
//            String fileName = UUID.randomUUID().toString().replace("-", "") + ".png" ;
//            byte[] bytes = picture.getData();
//            MultipartFile multipartFile = new ByteArrayToMultipartFile(
//                    bytes,
//                    fileName,
//                    "image/png"
//            );
//            long size = multipartFile.getSize() / 1024;
//            ResponseBean<String> responseBean = fastDfsFeign.uploadFile(multipartFile);
//            if (!Objects.equals(responseBean.getCode(), Constants.HTTP_SUCCESS_CODE)){
//                log.error("docx图片上传失败：{}", JSONUtil.toJsonStr(responseBean));
//                continue;
//            }
//            String filePath = responseBean.getData();
//            filePathList.add(FilePathRt.builder()
//                    .fileName(fileName)
//                    .filePath(filePath)
//                    .fileSize(size)
//                    .build());
//        }
//        return filePathList;
//    }
//
//    /**
//     * 解析Word文档并提取中文字符
//     *
//     * @param fis InputStream
//     * @return String 文本
//     * @throws IOException 异常
//     */
//    public static String parseWordFileDoc(InputStream fis) throws Exception {
//        List<String> content = new ArrayList<>();
//        HWPFDocument document = new HWPFDocument(fis);
//        Range range = document.getRange();
//        // 解析段落
//        for (int i = 0; i < range.numParagraphs(); i++) {
//            Paragraph paragraph = range.getParagraph(i);
//            String text = paragraph.text().trim();
//            if (!text.isEmpty()) {
//                content.add(text);
//            }
//        }
//
//        // 解析表格
//        TableIterator tableIterator = new TableIterator(range);
//        while (tableIterator.hasNext()) {
//            Table table = tableIterator.next();
//            for (int j = 0; j < table.numRows(); j++) {
//                TableRow row = table.getRow(j);
//                for (int k = 0; k < row.numCells(); k++) {
//                    TableCell cell = row.getCell(k);
//                    String text = cell.text().trim();
//                    if (!text.isEmpty()) {
//                        content.add(text);
//                    }
//                }
//            }
//        }
//
//        StringBuilder stringBuilder = new StringBuilder();
//        for (String txt : content) {
//            stringBuilder.append(txt);
//            stringBuilder.append("\n");
//        }
//        return stringBuilder.toString();
//    }
//
//    /**
//     * doc 抽取图片
//     *
//     * @param fis InputStream
//     * @param fastDfsFeign FastDfsFeign
//     * @throws IOException IOException
//     */
//    public static List<FilePathRt> extractImagesDoc(InputStream fis, FastDfsFeign fastDfsFeign) throws IOException {
//        List<FilePathRt> filePathList = new ArrayList<>();
//        HWPFDocument document = new HWPFDocument(fis);
//        List<Picture> pictures = document.getPicturesTable().getAllPictures();
//        if (filePathList.size() > Constants.FILE_PIC_LIMITATION){
//            log.info("DOC文件 图片数据超过{}张",Constants.FILE_PIC_LIMITATION);
//            return new ArrayList<>();
//        }
//        for (Picture picture : pictures) {
//            String fileName = UUID.randomUUID().toString().replace("-", "") + ".png" ;
//            byte[] bytes = picture.getContent();
//            MultipartFile multipartFile = new ByteArrayToMultipartFile(
//                    bytes,
//                    fileName,
//                    "image/png"
//            );
//            long size = multipartFile.getSize() / 1024;
//            ResponseBean<String> responseBean = fastDfsFeign.uploadFile(multipartFile);
//            if (!Objects.equals(responseBean.getCode(), Constants.HTTP_SUCCESS_CODE)){
//                log.error("doc图片上传失败：{}", JSONUtil.toJsonStr(responseBean));
//                continue;
//            }
//            String filePath = responseBean.getData();
//            filePathList.add(FilePathRt.builder()
//                    .fileName(fileName)
//                    .filePath(filePath)
//                    .fileSize(size)
//                    .build());
//        }
//        return filePathList;
//    }
//
//    /**
//     * 获取文件后缀
//     *
//     * @param fileName fileName
//     * @return String
//     */
//    public static String getFileExtension(String fileName) {
//        if (fileName == null || fileName.lastIndexOf(".") == -1) {
//            return "";
//        }
//        return fileName.substring(fileName.lastIndexOf(".") + 1);
//    }
//}
